home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
fish
/
751-760
/
754
/
softrack
/
install.s
< prev
next >
Wrap
Text File
|
1995-03-18
|
5KB
|
271 lines
;Install.Written by Kamran Karimi.It istalls two routines at the DoIO and
;SendIO vectors.To be Assembled with Cape Assembler and linked with blink
;to produce SofTrack
ExecBase equ 4
PutMsg equ -366
Allocmem equ -198
FreeMem equ -210
DoIo equ -454
SendIo equ -460
XDEF _Install
XREF _Port
_Install:
move.l a6,-(a7)
move.l ExecBase,a6
move.l DoIo(a6),SaveDoIo
move.l SendIo(a6),SaveSendIo
lea MessageD,a1
move.b #5,8(a1) ;message type
move.w #6,18(a1) ;message length
lea MessageS,a1
move.b #5,8(a1) ;message type
move.w #6,18(a1)
move.l ExecBase,a6
move.l _Port,PortD
move.l _Port,PortS
beq End_Main
move.l #EndeDoIo-BeginDoIo,d0
move.l #$10000,d1
jsr Allocmem(a6)
move.l d0,ReservedDoIo
beq End_Main
move.l #EndeSendIo-BeginSendIo,d0
jsr Allocmem(a6)
move.l d0,ReservedSendIo
bne MemAllocated
move.l ReservedDoIo,a1
move.l #EndeDoIo-BeginDoIo,d0
jsr FreeMem(a6)
bra End_Main
MemAllocated:
move.l #BeginDoIo,a0
move.l ReservedDoIo,a1
move.l #EndeDoIo-BeginDoIo,d0
subi.l #1,d0
lop1:
move.b (a0)+,(a1)+
dbra d0,lop1
move.l ReservedDoIo,DoIo(a6)
move.l #BeginSendIo,a0
move.l ReservedSendIo,a1
move.l #EndeSendIo-BeginSendIo,d0
subi.l #1,d0
lop2:
move.b (a0)+,(a1)+
dbra d0,lop2
move.l ReservedSendIo,SendIo(a6)
moveq #0,d0
bra Payan
End_Main:
move.l #10,d0
Payan: ;in Persian (Parsi or Farsi, as we call it) means end
move.l (a7)+,a6
rts
ReservedDoIo: dc.l 0
ReservedSendIo: dc.l 0
BeginDoIo:
movem.l d0/d1/d2/d3/d4/a0/a1/a2/a3/a4/a6,-(a7)
move.l 20(a1),a2
move.l 10(a2),a3
move.l #15,d0
lea TrackNameD(pc),a4
lop2D:
cmpm.b (a3)+,(a4)+
bne EnditD
dbra d0,lop2D
lea MessageD(pc),a2
move.l 24(a1),a4
move.b $41(a4),d0
btst.b #3,d0
bne df1D
move.b #0,20(a2)
bra ContD
df1D:
btst.b #4,d0
bne df2D
move.b #1,20(a2)
bra ContD
df2D:
btst #5,d0
bne df3D
move.b #2,20(a2)
bra ContD
df3D:
btst.b #6,d0
bne EnditD
move.b #3,20(a2)
ContD:
move.b #'R',26(a2)
move.w 28(a1),d0 ;d0 has command
andi.w #$00ff,d0
cmpi.w #2,d0
beq TrackChangeD
cmpi.w #10,d0
beq TrackChangeD
cmpi.w #16,d0
beq TrackChangeD
move.b #'W',26(a2)
cmpi.w #3,d0
beq TrackChangeD
cmpi.w #11,d0
beq TrackChangeD
cmpi.w #17,d0
beq TrackChangeD
bra EnditD
TrackChangeD:
moveq #0,d4
move.l #16,d2
move.l 44(a1),d1 ;sector offset
move.l #11264,d3
divu d3,d1 ;track
andi.l #$0000ffff,d1
divu #100,d1
addi.b #48,d1
cmp.b #'0',d1
bne NZD1
move.b #' ',d1
moveq #1,d4
NZD1:
move.b d1,22(a2)
lsr.l d2,d1
divu #10,d1
addi.b #48,d1
tst d4
beq NZD2
cmp.b #'0',d1
bne NZD2
move.b #' ',d1
NZD2:
move.b d1,23(a2)
lsr.l d2,d1
addi.b #48,d1
move.b d1,24(a2)
move.l ExecBase,a6
move.l PortD(pc),a0
lea MessageD(pc),a1
jsr PutMsg(a6)
EnditD:
movem.l (a7)+,d0/d1/d2/d3/d4/a0/a1/a2/a3/a4/a6
move.l SaveDoIo(pc),-(a7)
rts
SaveDoIo: dc.l 0
MessageD: ds.b 20
dc.w 0
dc.b "000 ",0
PortD: dc.l 0
TrackNameD: dc.b "trackdisk.device",0,0
EndeDoIo:
BeginSendIo:
movem.l d0/d1/d2/d3/d4/a0/a1/a2/a3/a4/a6,-(a7)
move.l 20(a1),a2
move.l 10(a2),a3
move.l #15,d0
lea TrackNameS(pc),a4
lop2S:
cmpm.b (a3)+,(a4)+
bne EnditS
dbra d0,lop2S
lea MessageS(pc),a2
move.l 24(a1),a4
move.b $41(a4),d0
btst.b #3,d0
bne df1S
move.b #0,20(a2)
bra ContS
df1S:
btst.b #4,d0
bne df2S
move.b #1,20(a2)
bra ContS
df2S:
btst.b #5,d0
bne df3S
move.b #2,20(a2)
bra ContS
df3S:
btst.b #6,d0
bne EnditS
move.b #3,20(a2)
ContS:
move.b #'R',26(a2)
move.w 28(a1),d0 ;d0 has command
andi.w #$00ff,d0
cmpi.w #2,d0
beq TrackChangeS
cmpi.w #10,d0
beq TrackChangeS
cmpi.w #16,d0
beq TrackChangeS
move.b #'W',26(a2)
cmpi.w #3,d0
beq TrackChangeS
cmpi.w #11,d0
beq TrackChangeS
cmpi.w #17,d0
beq TrackChangeS
bra EnditS
TrackChangeS:
moveq #0,d4
move.l #16,d2
move.l 44(a1),d1 ;sector offset
move.l #11264,d3
divu d3,d1 ;track
andi.l #$0000ffff,d1
divu #100,d1
addi.b #48,d1
cmp.b #'0',d1
bne NZS1
move.b #' ',d1
moveq #1,d4
NZS1:
move.b d1,22(a2)
lsr.l d2,d1
divu #10,d1
addi.b #48,d1
tst d4
beq NZS2
cmp.b #'0',d1
bne NZS2
move.b #' ',d1
NZS2:
move.b d1,23(a2)
lsr.l d2,d1
addi.b #48,d1
move.b d1,24(a2)
move.l ExecBase,a6
move.l PortS(pc),a0
lea MessageS(pc),a1
jsr PutMsg(a6)
EnditS:
movem.l (a7)+,d0/d1/d2/d3/d4/a0/a1/a2/a3/a4/a6
move.l SaveSendIo(pc),-(a7)
rts
SaveSendIo: dc.l 0
MessageS: ds.b 20
dc.w 0
dc.b "000 ",0
PortS: dc.l 0
TrackNameS: dc.b "trackdisk.device",0,0
EndeSendIo:
end